﻿package com.manyiaby.view.viewutils;

import java.math.BigDecimal;

/**
 * Created by yx on 2017/6/30.
 */


public class BigDecimalArith {
    /**
     * 提供精确加法计算的add方法
     *
     * @param value1 被加数
     * @param value2 加数
     * @return 两个参数的和
     */
    public static double add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();

    }

    /**
     * 提供精确减法运算的sub方法
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static double sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();

    }

    /**
     * 提供精确乘法运算的mul方法
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static double mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 提供精确的除法运算方法div
     *
     * @param value1 被除数
     * @param value2 除数
     * @param scale  精确范围
     * @return 两个参数的商
     * @throws IllegalAccessException
     */
    public static double div(double value1, double value2, int scale) throws IllegalAccessException {
        //如果精确范围小于0，抛出异常信息
        if (scale < 0) {
            throw new IllegalAccessException("精确度不能小于0");

        }
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.divide(b2, scale).doubleValue();
    }


    /**
     * 比较我的数，是否大于别个数(true 大于，false不大于)
     *
     * @param value 我的数value
     * @param num   别个数num
     * 传入参数必须是数字/小数字符串，否则BigDecimal异常转换
     */
    public static Boolean compare(String value,String num){
	BigDecimal b1 = new BigDecimal(value);
	BigDecimal b2 = new BigDecimal(num);
	if(b1.compareTo(b2) == 1){//等于1表示：我的数大于另一个数。
	   //b1大于b2
	   return true;
	}
	return false;//等于-1表示：b1小于b2
    }

    // BigDecimal db = b1.multiply(b2).setScale(2, BigDecimal.ROUND_HALF_DOWN);//b1乘以b2 保留2位小数
    // .setScale(2)表示保留的小数位
    // BigDecimal bd3 = bd1.divide(bd2,6,BigDecimal.ROUND_HALF_UP);//参2，保留6位小数
    // BigDecimal.ROUND_HALF_DOWN 四舍五入，2.35 变成2.3，如果是5则向下舍
    // BigDecimal.ROUND_DOWN 直接删除多余小数位，如 2.35 变成2.3
    // BigDecimal.ROUND_UP  进位处理，如 2.35 变成2.4 , 2.4变成3.0
    // BigDecimal.ROUND_HALF_UP   四舍五入，如 2.35 变成2.4
    // BigDecimal.ROUND_UNNECESSARY 计算结果是精确的，不需要舍入模式





}